Technical Q&A QA1311
Registering a Rendezvous service multiple times


Q: 1 台のコンピュータで同じ Rendezvous サービスを複数回登録したとき、どの場合にも名前衝突のエラーが発生しません。 これはなぜですか?

A: 同一のコンピュータで同じ名前/タイプ/ドメイン/ポートを複数回登録した場合、登録した DNS リソースレコードは同じ rdata を持ち、矛盾が起きないため、エラーが発生しません。名前衝突と認識されるのは、rdata が異なる場合のみです。

このようになっているのは、Rendezvous がさまざまなプロキシ機能を果たせるようにするためです。たとえば、ネットワークに接続されている、LPR による印刷を行うプリンタが Rendezvous を使ってアドバタイズをしていないとします。この場合には、プリンタに代わってアドバタイズを行う Rendezvous プロキシを作成することができます。耐障害性を考慮して、ネットワーク上でプロキシを 2 つ実行する場合には、プロキシどうしが衝突する状況は避ける必要があります。Rendezvous では、rdata が異なる場合にのみ衝突があると認識するため、2 つのプロキシは何の問題もなく共存できます。どちらのプロキシも同じ問い合わせに対して同じ答えを返す限り、一方が他方の答えを、衝突するものと認識しません。

rdata が異なる必要がある状況としては、CFNetServices または NSNetServices を使用して、異なるコンピュータから同じ 2 つの名前/タイプ/ドメイン/ポートを登録した場合が考えられます。この場合、SRV レコードの Target Host に含まれるアドレスレコードが異なるために(2 つのコンピュータの IP アドレスが異なるため)rdata が異なります。その結果、名前衝突のエラーが発生します。同じコンピュータから 2 つのまったく同じ名前/タイプ/ドメインを登録しても、ポート番号が異なれば、名前が衝突していると認識されます。

1 台のコンピュータで同じ Rendezvous サービスを複数回登録することはまったく正当なことですが、多くの場合、複数回登録はアプリケーションのバグが原因です。したがって、アプリケーションデベロッパがこの状況を検出できるように、次のようなエラーメッセージがシステムのログ(/var/log/system.log)に出力されるようになっています。



リスト 1. system.log のメッセージ

Oct  4 18:16:21 localhost mDNSResponder[177]:13423: Client application
registered 2 identical instances of service Cube._http._tcp.local. port 80.



Rendezvous によって使用されているプロトコルの詳細については、Rendezvous Developer Web Site から参照できる技術仕様を参照してください。


[2003 年 10 月 23 日]